+2007-04-18 Richard Hult <richard@imendio.com>
+
+ * gdk/quartz/gdkwindow-quartz.c:
+ (gdk_window_quartz_process_updates_internal),
+ (gdk_window_quartz_process_all_updates),
+ (gdk_window_impl_quartz_process_updates): Refactor the process
+ updates functions to share code between them. Also fixes bug
+ #427660 by not updating larger regions than necessary.
+
2007-04-18 Matthias Clasen <mclasen@redhat.com>
* gdk/gdkregion-generic.h (GROWREGION): Handle the case
}
}
+static void
+gdk_window_quartz_process_updates_internal (GdkWindow *window)
+{
+ GdkWindowObject *private = (GdkWindowObject *) window;
+ GdkWindowImplQuartz *impl = (GdkWindowImplQuartz *) private->impl;
+
+ if (private->update_area)
+ {
+ int i, n_rects;
+ GdkRectangle *rects;
+
+ gdk_region_get_rectangles (private->update_area, &rects, &n_rects);
+
+ gdk_region_destroy (private->update_area);
+ private->update_area = NULL;
+
+ for (i = 0; i < n_rects; i++)
+ {
+ [impl->view setNeedsDisplayInRect:NSMakeRect (rects[i].x, rects[i].y,
+ rects[i].width, rects[i].height)];
+ }
+
+ [impl->view displayIfNeeded];
+
+ g_free (rects);
+ }
+}
+
static void
gdk_window_quartz_process_all_updates (void)
{
while (tmp_list)
{
- GdkWindowObject *private = tmp_list->data;
- GdkWindowImplQuartz *impl = (GdkWindowImplQuartz *) private->impl;
- int i, n_rects;
- GdkRectangle *rects;
-
- if (private->update_area)
- {
- gdk_region_get_rectangles (private->update_area, &rects, &n_rects);
-
- gdk_region_destroy (private->update_area);
- private->update_area = NULL;
-
- for (i = 0; i < n_rects; i++)
- {
- [impl->view setNeedsDisplayInRect:NSMakeRect (rects[i].x, rects[i].y,
- rects[i].width, rects[i].height)];
- }
-
- [impl->view displayIfNeeded];
-
- g_free (rects);
- }
+ gdk_window_quartz_process_updates_internal (tmp_list->data);
g_object_unref (tmp_list->data);
tmp_list = tmp_list->next;
if (private->update_area)
{
- gdk_region_destroy (private->update_area);
- private->update_area = NULL;
- }
-
- [impl->view setNeedsDisplay: YES];
- update_windows = g_slist_remove (update_windows, private);
+ gdk_window_quartz_process_updates_internal ((GdkWindow *) private);
+ update_windows = g_slist_remove (update_windows, private);
+ }
}
static void